package org.aplombh.java.awcing.basic.dp.countDP;

import java.io.*;

/**
 * 一个正整数 n 可以表示成若干个正整数之和，形如：n=n1+n2+…+nk，其中 n1≥n2≥…≥nk,k≥1。
 * <p>
 * 我们将这样的一种表示称为正整数 n 的一种划分。
 * <p>
 * 现在给定一个正整数 n，请你求出 n 共有多少种不同的划分方法。
 * <p>
 * 输入格式
 * 共一行，包含一个整数 n。
 * <p>
 * 输出格式
 * 共一行，包含一个整数，表示总划分数量。
 * <p>
 * 由于答案可能很大，输出结果请对 109+7 取模。
 * <p>
 * 数据范围
 * 1≤n≤1000
 * 输入样例:
 * 5
 * 输出样例：
 * 7
 */
public class IntegerDivision_900 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());

//        IntegerDivisionOptimize ido = new IntegerDivisionOptimize(n);
        IntegerDivision ido = new IntegerDivision(n);

        System.out.println(ido.solve2());
    }
}

class IntegerDivisionOptimize {
    static final int N = 1010;
    static final int MOD = (int) (1e9 + 7);
    int n;
    int[] f = new int[N];

    public IntegerDivisionOptimize(int n) {
        this.n = n;
        f[0] = 1;
    }

    public int solve() {
        for (int i = 1; i <= n; i++) {
            for (int j = i; j <= n; j++) {
                f[j] = (f[j] + f[j - i]) % MOD;
            }
        }
        return f[n];
    }
}

class IntegerDivision {
    static final int N = 1010;
    static final int MOD = (int) (1e9 + 7);
    int n;
    int[][] f = new int[N][N];

    public IntegerDivision(int n) {
        this.n = n;
        f[0][0] = 1;
    }

    public int solve() {
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= n; j++) {
                for (int k = 0; j - k * i >= 0; k++) {
                    f[i][j] += f[i - 1][j - k * i];
                }
            }
        }
        return f[n][n];
    }

    public int solve2() {
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= n; j++) {
                if (i <= j)
                    f[i][j] = (f[i - 1][j] + f[i][j - i]) % MOD;
                else
                    f[i][j] = f[i - 1][j] % MOD;
            }
        }
        return f[n][n];
    }
}
